package com.wuliang.generate.common.core.basic;

import com.wuliang.generate.common.core.response.Result;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;

import java.util.Map;

/**
 * @author 邬魉
 */
public interface BasicClient<V extends BaseVo<? extends BasicEntity>> {

    /**
     * 根据关键词分页显示列表
     *
     * @param vo 关键词
     * @return 分页数据
     */
    @PostMapping("/findPageByKeywords")
    Result<?> findPageByKeywords(V vo);

    /**
     * 根据ID删除指定数据
     *
     * @param id 数据ID
     * @return 是否操作成功
     */
    @DeleteMapping("/deleteOne/{id}")
    Result<?> deleteOne(@PathVariable("id") Integer id);

    /**
     * 根据id数组批量删除
     *
     * @param vo 传参对象
     * @return 是否操作成功
     */
    @PostMapping("/deleteByIdList")
    Result<?> deleteByIdList(@RequestBody V vo);

    /**
     * 根据当前登录用户删除指定数据
     *
     * @param id 数据ID
     * @param token 当前登录用户的token
     * @return 是否操作成功
     */
    @PostMapping("/deleteOneByUser/{id}")
    Result<?> deleteOneByUser(@PathVariable Integer id, @RequestHeader("Token") String token);

    /**
     * 根据ID获取指定数据
     *
     * @param id 数据ID
     * @param token 当前登录用户的令牌
     * @return 实体类对象
     */
    @PostMapping("/getEntityById/{id}")
    Result<?> getEntityById(@PathVariable(name = "id") Integer id, @RequestHeader("Token") String token);

    /**
     * 保存，包括修改，新建
     *
     * @param vo 要保存的数据
     * @return 是否操作成功
     */
    @PostMapping("/save")
    Result<?> save(@RequestBody V vo);

}
